LibGG i wysylanie obrazka
Oglądasz archiwalną wersję wątku "LibGG i wysylanie obrazka" z forum alt.pl.comp.os.hacking
mx
hej, wiem ze troche NTG ale tu 'siedza' znawcy libGG ;)

a wiec mam pytanko male, jak wyslac obrazek (libGG najnowsza wersja, win32,
.NET) ?
mam klienta (gg 6.1 build 156) i wysylam mu obrazek mniej wiecej tak:

#pragma pack(1)
typedef struct _my_format
{
 char  gflag;
 short len;
 short pos;
 char  flag;
 short unknown1;
 long  size;
 long  crc32;

} my_format;


#pragma pack()

// ...

my_format fmt;

fmt.gflag = 2;
fmt.len   = 13;
fmt.pos   = 0;
fmt.flag  = GG_FONT_IMAGE;
fmt.unknown1 = 0x0109;
fmt.size  = imgsize;  // rozmiar obrazka
fmt.crc32 = imgcrc32; // crc obrazka

if (gg_send_message_richtext(sess, GG_CLASS_MSG, target_rec, "obrazek",
(unsigned char*)&fmt, sizeof(my_format)) == -1)
    fucked_error();

potem w odpowiedzi dostaje tylko GG_EVENT_ACK a u klienta pokazuje sie napis
'obrazek'
a nie dostaje juz GG_CLASS_MSG z dolaczona gg_msg_image_request
dlaczego ?
oczywiscie klient nie ma tego obrazka w swoim cache, ma wlaczona mozliwosc
odbierania obrazkow, obrazek jest ponizej limitu rozmiar, etc.
wiec powinien mi wyslac ze go chce,
co robie nie tak ?

dzieki za jakas pomoc ;)

Adam Mikuta

co robie nie tak ?


Możesz zesnifować te pakiety i pokazać jak to wygląda? Bo niby wszystko
ok ale coś musi być nie tak :)

mx

Możesz zesnifować te pakiety i pokazać jak to wygląda? Bo niby wszystko
ok ale coś musi być nie tak :)


rozmiar obrazka: 904 (0x0388) CRC: 0xC0C1F0D7

// wysylam
** gg_send_message_richtext(00390FE8, 4, 1638895, 0040C1A0, 0012FCE4, 16);
** gg_send_packet(00390FE8, 0x0b, ...)
// gg_send_packet(0x0b) 0b 00 00 00 24 00 00 00 ef 01 19 00 4c 03 74 01 04
00 00 00 6f 62 72 61 7a 65 6b 00 02 0d 00 00 00 80 09 01 88 03 00 00 d7 f0
c1 c0

// klient odsyla
** gg_watch_fd(00390FE8);
// gg_watch_fd() GG_STATE_CONNECTED
** gg_watch_fd_connected(00390FE8, 003910D0);
** gg_recv_packet(00390FE8);
// gg_recv_packet() header recv(1752,0012F3D0,8) = 8
// gg_recv_packet() body recv(1752,00391108,12) = 12
// gg_recv_packet(05) 05 00 00 00 0c 00 00 00 03 00 00 00 ef 01 19 00 4c 03
74 01
// gg_watch_fd_connected() received a message ack

i tu sie wszystko konczy, nie dostaje nastepnie pustego message'a
co ciekawe, jesli obrazek jest w cacheu, to wyswietla sie poprawnie u
klienta

hmm jedyne co mi przychodzi do glowy to to ze najnowsze gg cos tam inaczej
te obrazki handluje (?!)

z loga w orginalnym kliencie wyglada tak:

// obcy klient wyslal [obrazek]6666
[09:09:19] Otrzymano z gniazda 0x2c8:
62 d2 0f 00 90 58 f3 00 bd d1 22 42 08 00 00 00 36 36 36 36 00 02 0d 00 00
00 80 09 01 06 0e 00 00 53 06 08 28

// moj odpowiedzial (jak widac nie odpowiedzial ACK'kiem, jak w wypadku
wysylania identycznego pakietu z libgg)
[09:09:19] Wysłano do gniazda 0x2c8:
0b 00 00 00 16 00 00 00 62 d2 0f 00 00 00 00 00 04 00 00 00 00 04 06 0e 00
00 53 06 08 28

[09:09:20] Otrzymano z gniazda 0x2c8:
05 00 00 00 0c 00 00 00

[09:09:20] Otrzymano z gniazda 0x2c8:
02 00 00 00 62 d2 0f 00 00 00 00 00

[09:09:20] Otrzymano z gniazda 0x2c8:
0a 00 00 00 86 07 00 00

// tu zaczyna sie wysylanie obrazka
[09:09:20] Otrzymano z gniazda 0x2c8:
62 d2 0f 00 00 00 00 00 be d1 22 42 04 00 00 00 ...

hmmm czy chodzi o to ze libgg loguje sie z inna wesja niz najnowszy klient ?
[wild guess]
narazie nie mam czasu sprawdzic ale na to mi wyglada, innego pomysla nie mam
narazie :(

Adam Mikuta

rozmiar obrazka: 904 (0x0388) CRC: 0xC0C1F0D7
// wysylam
(...)
0b 00 00 00        typ pakietu
24 00 00 00        długość
ef 01 19 00        odbiorca
4c 03 74 01        seq
04 00 00 00        klasa
6f 62 72 61 7a 65 6b 00    wiadomość
02 jakieś - coś nie pamiętam
0d 00      długość dalszej części
00 00 pozycja
80         obrazek
09 01 unknown
88 03 00 00        rozmiar obrazka
d7 f0 c1 c0        crc obrazka


Hm, niby ok. A spróbuj posłać z klasa np 28 00 00 00 i powiedz co się
dzieje...

mx

Hm, niby ok. A spróbuj posłać z klasa np 28 00 00 00 i powiedz co się
dzieje...


po wyslaniu z klasa 0x28 nic sie nie dzieje, nie dostaje nawet ACK'a (z
klasa GG_CLASS_MSG albo GG_CLASS_CHAT dostaje ACK)
natomiast jak wysle z orginalnego klienta to mam to:

[10:02:28] Wysłano do gniazda 0x278:
0b 00 00 00 21 00 00 00 ef 01 19 00 88 4d 0a 01 28 00 00 00 36 36 36 36 00
02 0d 00 00 00 80 09 01 1a 07 00 00 85 9a df 2e

[10:02:29] Otrzymano z gniazda 0x278:
0a 00 00 00 1a 00 00 00

nawet jak wysle 'raw' packeta udentycznego jak powyzej, to nie dostaje w
odpowiedzi nic,
i zabardzo nie wiem czemu, skoro wszystkie inne funkcje lib_gg dzialaja
wysmienicie, tylko tych glupich obrazkow wysylac nie moge ;(

Adam Mikuta

nawet jak wysle 'raw' packeta udentycznego jak powyzej, to nie dostaje w
odpowiedzi nic,
i zabardzo nie wiem czemu, skoro wszystkie inne funkcje lib_gg dzialaja
wysmienicie, tylko tych glupich obrazkow wysylac nie moge ;(


Może rzeczywiście przy logowaniu za starą wersję protokołu podaje... no
cudów nie ma zesniffuj jak przebiega całe połączenie z serwerem przy
pomocy orginalnego klienta i przy pomocy tej biblioteki, znajdź różnice
i zrób tak żeby ich nie było... Musi działać.

mx
no dobra, ciekawa sprawa jest taka
ze klient gg WYSYLA pakiet ze chce obrzek, ale po przejsciu przez server gg,
on juz do mojej aplikacji nie dochodzi, dochodzi za to ACK
zmienilem wersje logiowania na 6.1 build 156 jednak nic to nie zmienilo
ale zauwazylem ze GG_LOGIN60 z lib_gg wyglad troche inaczje niz ten z
orginalnego klienta, jak mi sie uda wyslac ten obrazek to dam znac
narazie musze to zostawic bo mam mase innych projektow na glowe :(
Wysyłanie wiadomości GG... bez GG
Czy Amazon.com wysyła towary do Polski?
mada faka - F1
  • po C2lydki po nos po szyjC3AA peC2lno nas
  • swarzedz;basen
  • 126p bosmal cabrio
  • zyczenia slubne od mamy dla corki
  • statue tutorial czyli jak zrobic sobie posag
  • cockatoo
  • estradiol norma
  • angielsko jEAzyczny patch dla rainbow six vegas
  • EFEEF0EDEE F0EEEBE8eE8 E1E5E7 F0E5E3E8nF2F0E0F6E8E8 EFEEF0EDEE F0EEEBE8eE8
  • Zbieranina wiadomości z for dyskusyjnych : Start